﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace mrp16062010
{
    [Serializable()]
    class Ayarlar:ISerializable
    {
        private static Ayarlar nesne;
        private static object syncRoot = new Object();

        private Ayarlar()
        {
            similasyonTekrarSayisi = 10;
            DateTime baslangicTarihi = new DateTime(2010, 1, 1);
            baslangicTarihi = baslangicTarihi.ChangeTime(9, 30, 0, 0);
            DateTime bitisTarihi = new DateTime(2010, 12, 30);
            bitisTarihi = bitisTarihi.ChangeTime(17, 30, 0, 0);
            this.anaAralik = new Tarih(baslangicTarihi, bitisTarihi);
            this.tatilAraliklari = new List<Uretec.AralikSaat>();
            this.calismaSaatleri = new Uretec.AralikSaat(
                        new Uretec.SaatTanim
                            (9, 30),
                        new Uretec.SaatTanim
                            (17, 30)
                        );
            this.SiparisBuyuklugu = new Uretec.Aralik(20, 30);
            this.GunlukSiparisAraligi = new Uretec.Aralik(1, 3);
            this.TeslimAraligi = new Uretec.Aralik(15, 25);
            this.similasyonCalismaAraligi = TimeSpan.FromMinutes(1);
            this.urunAdedi = 20;
            this.veriKaydiAcik = true;
            this.optimumYuklemeYuzdesi = 5;
            this.kayitYolu = "C:\\serialized.xml";
            this.logKaydiAcik = false;

            this.urunAgaciTipi = new Uretec.UrunAgaciTipi(true);

            this.urunAgaciTipi.BilesenKullanimAdediMontaj = new Uretec.Aralik(1, 1);
            this.urunAgaciTipi.BilesenKullanimAdediImalat = new Uretec.Aralik(2, 4);
            this.urunAgaciTipi.ImalatHazirlikSuresi = new Uretec.Aralik(0, 0);
            this.urunAgaciTipi.MontajHazirlikSuresi = new Uretec.Aralik(0, 0);
            this.urunAgaciTipi.ImalatOperasyonSuresi = new Uretec.Aralik(20, 40);
            this.urunAgaciTipi.MontajOperasyonSuresi = new Uretec.Aralik(30, 40);
            this.urunAgaciTipi.ImalatOperasyonSayisi = new Uretec.Aralik(2, 5);
            this.urunAgaciTipi.MontajOperasyonSayisi = new Uretec.Aralik(2, 4);

            this.duzAltUrunSayi = new Uretec.Aralik(0,0);
            this.duzImalEdilen = new Uretec.Aralik(4,7);
            this.duzSeviye = 2;

            this.karisikAltUrunSayi = new Uretec.Aralik(1,2);
            this.karisikImalEdilen = new Uretec.Aralik(1,2);
            this.karisikSeviye = 4;

            this.uzunAltUrunSayi = new Uretec.Aralik(1,1);
            this.uzunImalEdilen = new Uretec.Aralik(1,1);
            this.uzunSeviye = 5;

            this.sadeceIleriYukle = false;
            this.Karmala = true;

        }



        public static Ayarlar Nesne
        {
            get
            {
                if (nesne == null)
                {
                    lock (syncRoot)
                    {
                        if (nesne == null)
                        //    nesne = new Ayarlar();
                        nesne=Serialize.FileSerialization.FileDeSerialize<Ayarlar>("c:\\ayarlar.xml");
                    }
                }
                return nesne;
            }
        }

        public void Kaydet()
        {
            Serialize.FileSerialization.FileSerialize(this, "c:\\ayarlar.xml");
        }

        private Tarih anaAralik;

        public Tarih AnaAralik
        {
            get { return anaAralik; }
            set { anaAralik = value; }
        }

        private TimeSpan similasyonCalismaAraligi;

        public TimeSpan SimilasyonCalismaAraligi
        {
            get { return similasyonCalismaAraligi; }
            set { similasyonCalismaAraligi = value; }
        }

        private Uretec.UrunAgaciTipi urunAgaci;

        public Uretec.UrunAgaciTipi UrunAgaci
        {
            get { return urunAgaci; }
            set { urunAgaci = value; }
        }

        private Uretec.Aralik siparisBuyuklugu;

        public Uretec.Aralik SiparisBuyuklugu
        {
            get { return siparisBuyuklugu; }
            set { siparisBuyuklugu = value; }
        }

        private Uretec.Aralik gunlukSiparisAraligi;

        public Uretec.Aralik GunlukSiparisAraligi
        {
            get { return gunlukSiparisAraligi; }
            set { gunlukSiparisAraligi = value; }
        }

        private Uretec.Aralik teslimAraligi;

        public Uretec.Aralik TeslimAraligi
        {
            get { return teslimAraligi; }
            set { teslimAraligi = value; }
        }

        private Simulation.Kuyruk.IslemTipi kuyrukTipi;

        public Simulation.Kuyruk.IslemTipi KuyrukTipi
        {
            get { return kuyrukTipi; }
            set { kuyrukTipi = value; }
        }

        private TimeSpan isEmriAraligi;

        public TimeSpan IsEmriAraligi
        {
            get { return isEmriAraligi; }
            set { isEmriAraligi = value; }
        }
        
        private Uretec.AralikSaat calismaSaatleri;

        public Uretec.AralikSaat CalismaSaatleri
        {
            get { return calismaSaatleri; }
            set { calismaSaatleri = value; }
        }
        

        private int calismaNo;

        public int CalismaNo
        {
            get { return calismaNo; }
            set { calismaNo = value; }
        }

        private List<IsParcasi> tatilList;

        public List<IsParcasi> TatilList
        {
            get { return tatilList; }
            set { tatilList = value; }
        }

        private List<Uretec.AralikSaat> tatilAraliklari;

        public List<Uretec.AralikSaat> TatilAraliklari
        {
            get { return tatilAraliklari; }
            set { tatilAraliklari = value; }
        }

        private int urunAdedi;

        public int UrunAdedi
        {
            get { return urunAdedi; }
            set { urunAdedi = value; }
        }

        private int similasyonTekrarSayisi;

        public int SimilasyonTekrarSayisi
        {
            get { return similasyonTekrarSayisi; }
            set { similasyonTekrarSayisi = value; }
        }

        private bool veriKaydiAcik;

        public bool VeriKaydiAcik
        {
            get { return veriKaydiAcik; }
            set { veriKaydiAcik = value; }
        }

        private int optimumYuklemeYuzdesi;

        public int OptimumYuklemeYuzdesi
        {
            get { return optimumYuklemeYuzdesi; }
            set { optimumYuklemeYuzdesi = value; }
        }

        private string kayitYolu;

        public string KayitYolu
        {
            get { return kayitYolu; }
            set { kayitYolu = value; }
        }

        private bool logKaydiAcik;

        public bool LogKaydiAcik
        {
            get { return logKaydiAcik; }
            set { logKaydiAcik = value; }
        }

        private Uretec.UrunAgaciTipi urunAgaciTipi;

        public Uretec.UrunAgaciTipi UrunAgaciTipi
        {
            get { return urunAgaciTipi; }
            set { urunAgaciTipi = value; }
        }

        private Uretec.Aralik duzImalEdilen;

        public Uretec.Aralik DuzImalEdilen
        {
            get { return duzImalEdilen; }
            set { duzImalEdilen = value; }
        }

        private int duzSeviye;

        public int DuzSeviye
        {
            get { return duzSeviye; }
            set { duzSeviye = value; }
        }

        private Uretec.Aralik duzAltUrunSayi;

        public Uretec.Aralik DuzAltUrunSayi
        {
            get { return duzAltUrunSayi; }
            set { duzAltUrunSayi = value; }
        }
        

        private Uretec.Aralik uzunImalEdilen;

        public Uretec.Aralik UzunImalEdilen
        {
            get { return uzunImalEdilen; }
            set { uzunImalEdilen = value; }
        }

        private int uzunSeviye;

        public int UzunSeviye
        {
            get { return uzunSeviye; }
            set { uzunSeviye = value; }
        }

        private Uretec.Aralik uzunAltUrunSayi;

        public Uretec.Aralik UzunAltUrunSayi
        {
            get { return uzunAltUrunSayi; }
            set { uzunAltUrunSayi = value; }
        }

        private Uretec.Aralik karisikImalEdilen;

        public Uretec.Aralik KarisikImalEdilen
        {
            get { return karisikImalEdilen; }
            set { karisikImalEdilen = value; }
        }

        private int karisikSeviye;

        public int KarisikSeviye
        {
            get { return karisikSeviye; }
            set { karisikSeviye = value; }
        }

        private Uretec.Aralik karisikAltUrunSayi;

        public Uretec.Aralik KarisikAltUrunSayi
        {
            get { return karisikAltUrunSayi; }
            set { karisikAltUrunSayi = value; }
        }

        private bool sadeceIleriYukle;

        public bool SadeceIleriYukle
        {
            get { return sadeceIleriYukle; }
            set { sadeceIleriYukle = value; }
        }
        

        public Ayarlar(SerializationInfo info, StreamingContext ctxt)
        {
            Serialize.InfoCopier.Read(info, this);
        }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            Serialize.InfoCopier.Write(info, this);
        }

        public bool Karmala { get; set; }
    }
}
